package com.zhxy.util;

import com.zhxy.vo.PutPolicy;

/**
 * Token工具类。
 * @author XnOU
 */
public abstract class TokenUtil {

    public static String COLON = ":";

    /**
     * 获取上传的Token。
     * @param accessKey AK
     * @param putPolicy 上传策略
     * @return 上传Token
     */
    public static String getUploadToken(PutPolicy putPolicy) {
        JsonMapper jsonMapper = JsonMapper.nonEmptyMapper();
        String putPolicyStr = jsonMapper.toJson(putPolicy);
        String encodePutPolicy = EncodeUtils.urlsafeEncode(putPolicyStr);
        String signSk = EncryptUtil.sha1Hex(encodePutPolicy.getBytes(), Config.SK);// 签名
        String skValue = EncodeUtils.urlsafeEncode(signSk);
        String uploadToken = Config.AK + COLON + skValue + COLON + encodePutPolicy;
        return uploadToken;
    }

    /**
     * 获取删除的Token。
     * @param bucketName 空间名称
     * @param fileName 文件名称
     * @return 文件删除的Token
     */
    public static String getDeleteToken(String bucketName, String fileName) {
        String encodedEntryURI = EncodeUtils.urlsafeEncodeString((bucketName + COLON + fileName).getBytes());
        String encodeDeletePath = "/delete/" + encodedEntryURI + "\n";
        String signSk = EncryptUtil.sha1Hex(encodeDeletePath.getBytes(), Config.SK);// 签名
        String encodedSign = EncodeUtils.urlsafeEncode(signSk);// Base64编码
        String deleteToken = Config.AK + COLON + encodedSign;
        return deleteToken;
    }
    
    /**
     * 获取删除m3u8的Token。
     * @param bucketName 空间名称
     * @param fileName 文件名称
     * @return 文件删除的Token
     */
    public static String getDeleteM3u8Token(String bucketName, String fileName) {
        String encodedEntryURI = EncodeUtils.urlsafeEncodeString((bucketName + COLON + fileName).getBytes());
        String encodeDeletePath = "/deletem3u8/" + encodedEntryURI + "\n";
        String signSk = EncryptUtil.sha1Hex(encodeDeletePath.getBytes(), Config.SK);// 签名
        String encodedSign = EncodeUtils.urlsafeEncode(signSk);// Base64编码
        String deleteToken = Config.AK + COLON + encodedSign;
        return deleteToken;
    }

    /**
     * 获取前缀模糊删除的Token。
     * @param bucketName 空间名称
     * @param fileName 文件名称
     * @return 前缀模糊删除的Token
     */
    public static String getDeletePrefixToken(String bucketName, String fileName) {
        String encodedEntryURI = EncodeUtils.urlsafeEncodeString((bucketName + COLON + fileName).getBytes());
        String encodeDeletePath = "/deletePrefix/" + encodedEntryURI + "\n";
        String signSk = EncryptUtil.sha1Hex(encodeDeletePath.getBytes(), Config.SK);// 签名
        String encodedSign = EncodeUtils.urlsafeEncode(signSk);// Base64编码
        String deleteToken = Config.AK + COLON + encodedSign;
        return deleteToken;
    }


    /**
     * 获取文件信息的Token。
     * @param bucketName 空间名称
     * @param fileName 文件名称
     * @return 文件信息的Token
     */
    public static String getStatToken(String bucketName, String fileName) {
        String encodedEntryURI = EncodeUtils.urlsafeEncodeString((bucketName + COLON + fileName).getBytes());
        String encodeDeletePath = "/stat/" + encodedEntryURI + "\n";
        String signSk = EncryptUtil.sha1Hex(encodeDeletePath.getBytes(), Config.SK);// 签名
        String encodedSign = EncodeUtils.urlsafeEncode(signSk);// Base64编码
        String deleteToken = Config.AK + COLON + encodedSign;
        return deleteToken;
    }

}
